#include <bits/stdc++.h>
using namespace std;
using ll = long long int;
const int h = 1e5;
int primeFactors[h + 1];
void seive()
{
for (int i = 0; i <= h; i++)
primeFactors[i] = i;
for (int i = 2; i <= h; i++)
{
if (primeFactors[i] == i)
{
for (int j = 2 * i; j <= h; j += i)
{
if (primeFactors[j] == j)
primeFactors[j] = i;
}
}
}
}
void solve()
{
int n;
cin >> n;
int arr[n];
map<int, int> mp;
for (int i = 0; i < n; i++)
{
cin >> arr[i];
mp[arr[i]] = i;
}
// int dp[n]; // dp[i] : longest len of seq , ending at i.
int d[h + 1]; //
for (int i = 0; i <= h; i++)
d[i] = 0;
int ans = 0;
for (int i = 0; i < n; i++)
{
if (arr[i] == 1)
{
d[1] = 1;
ans = max(ans, 1);
continue;
}
int x = arr[i];
int mx = 0;
while (x > 1)
{
int div = primeFactors[x];
d[div] += 1;
mx = max(mx, d[div]);
while (x % div == 0)
{
x /= div;
}
}
x = arr[i];
while (x > 1)
{
int div = primeFactors[x];
d[div] = mx;
while (x % div == 0)
{
x /= div;
}
}
ans = max(ans, mx);
}
// cout << endl;
cout << ans << endl;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
seive();
solve();
return 0;
}
232. Implement Queue using Stacks | 844. Backspace String Compare |
20. Valid Parentheses | 746. Min Cost Climbing Stairs |
392. Is Subsequence | 70. Climbing Stairs |
53. Maximum Subarray | 1527A. And Then There Were K |
1689. Partitioning Into Minimum Number Of Deci-Binary Numbers | 318. Maximum Product of Word Lengths |
448. Find All Numbers Disappeared in an Array | 1155. Number of Dice Rolls With Target Sum |
415. Add Strings | 22. Generate Parentheses |
13. Roman to Integer | 2. Add Two Numbers |
515. Find Largest Value in Each Tree Row | 345. Reverse Vowels of a String |
628. Maximum Product of Three Numbers | 1526A - Mean Inequality |
1526B - I Hate 1111 | 1881. Maximum Value after Insertion |
237. Delete Node in a Linked List | 27. Remove Element |
39. Combination Sum | 378. Kth Smallest Element in a Sorted Matrix |
162. Find Peak Element | 1529A - Eshag Loves Big Arrays |
19. Remove Nth Node From End of List | 925. Long Pressed Name |